
import sys
from src.App import PySC
from qtpy.QtWidgets import QApplication
import argparse
import os
import json

def main():
    # 创建一个 QApplication 实例，用于管理 Qt 应用程序的事件循环和资源
    app = QApplication(sys.argv)

    # 调用 PyFlow 类的 instance 方法，创建或获取 PyFlow 应用的实例，指定软件运行模式为独立模式
    instance = PySC.instance(software="standalone")
    if instance is not None:
        # 激活 PyFlow 应用窗口，使其获得焦点
        instance.activateWindow()
        # 显示 PyFlow 应用窗口
        instance.show()

        # 创建一个 argparse.ArgumentParser 实例，用于解析命令行参数，设置描述信息
        parser = argparse.ArgumentParser(description="PyFlow CLI")
        # 添加一个名为 -f 或 --filePath 的命令行参数，类型为字符串，默认值为 "Untitled.pygraph"
        parser.add_argument("-f", "--filePath", type=str, default="Untitled.pygraph")
        # 解析命令行参数，parsedArguments 包含解析后的参数，unknown 包含未识别的参数
        parsedArguments, unknown = parser.parse_known_args(sys.argv[1:])
        # 获取解析后的文件路径参数
        filePath = parsedArguments.filePath
        # 检查文件路径是否以 ".pygraph" 结尾，如果不是则添加该扩展名
        if not filePath.endswith(".pygraph"):
            filePath += ".pygraph"
        # 检查指定的文件是否存在
        if os.path.exists(filePath):
            # 以只读模式打开文件
            with open(filePath, 'r') as f:
                # 加载 JSON 文件内容
                data = json.load(f)
                # 调用 PyFlow 实例的 loadFromData 方法，从加载的数据中恢复应用状态
                instance.loadFromData(data)
                # 设置当前 PyFlow 实例的文件名
                instance.currentFileName = filePath

        try:
            # 启动 Qt 应用程序的事件循环，并在应用程序退出时退出 Python 解释器
            sys.exit(app.exec_())
        except Exception as e:
            # 捕获异常并打印错误信息
            print(e)


if __name__ == "__main__":
    # 当脚本作为主程序运行时，调用 main 函数
    main()